import setting from '@/settings/projectSetting.js'

// 对外的方法名称(此方法主要用于h5公众号分享时ios路由问题)
async function route(options = {}, params = {}) {
  // 合并用户的配置和内部的默认配置
  let mergeConfig = {}
  if (typeof options === 'string') {
    // 如果options为字符串，则为route(url, params)的形式
    mergeConfig.url = mixinParam(options, params)
  } else {
    // 否则正常使用mergeConfig中的url和params进行拼接
    mergeConfig.url = mixinParam(options.url, options.params)
  }

  // #ifdef H5
  // 获取设备信息
  const platform = uni.getSystemInfoSync().platform
  if (platform == 'ios') {
    window.location.href = setting.appBaseUrl + mergeConfig.url
    return
  }
  // #endif
  uni.$u.route(options, params)
}

// 判断url前面是否有"/"，如果没有则加上，否则无法跳转
function addRootPath(url) {
  return url[0] === '/' ? url : `/${url}`
}

// 整合路由参数
function mixinParam(url, params) {
  url = url && addRootPath(url)

  // 使用正则匹配，主要依据是判断是否有"/","?","="等，如“/page/index/index?name=mary"
  // 如果有url中有get参数，转换后无需带上"?"
  let query = ''
  if (/.*\/.*\?.*=.*/.test(url)) {
    // object对象转为get类型的参数
    query = uni.$u.queryParams(params, false)
    // 因为已有get参数,所以后面拼接的参数需要带上"&"隔开
    return (url += '&' + query)
  } else {
    // 直接拼接参数，因为此处url中没有后面的query参数，也就没有"?/&"之类的符号
    query = uni.$u.queryParams(params)
    return (url += query)
  }
}

export default route
